﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;


namespace MvcApplication1.Models
{
    public class RepositorioUsuario : RepositorioBase, MvcApplication1.Models.IRepositorioUsuario1, IMembershipService
    {
        // Query Methods
        public IQueryable<Usuario> TodosLosUsuarios()
        {
            return db.Usuarios;
        }

        public Usuario getUsuario(int indice)
        {
            return db.Usuarios.SingleOrDefault(d => d.IDUsuario == indice);
        }

        public void AgregarUsuario(Usuario u)
        {
            db.Usuarios.InsertOnSubmit(u);
        }

        public void EliminarUsuario(Usuario u)
        {
            db.Usuarios.InsertOnSubmit(u);
        }

        public List<Usuario> EncontrarUsuariosTipo(int tipoDeUsuario)
        { 
            List<Usuario> usuarios = db.Usuarios.ToList();
            List<Usuario> usuariosTipo = new List<Usuario>();
            foreach (Usuario u in usuarios)
            {
                if (u.IDTipoDeUsario == tipoDeUsuario)
                    usuariosTipo.Add(u);
            }
            return usuariosTipo;
        }

        public Usuario EncontrarUsuarioNombre(string userName)
        {
            foreach (var usuario in db.Usuarios)
            {
                if (usuario.Usuario1.Equals(userName))
                {
                    return usuario;
                }
            }

            return null;
        }

        public int MinPasswordLength { get { return 6; } }

        public bool ValidateUser(string userName, string password)
        {
            foreach (var a in db.Usuarios)
            {
                for (int i = 0; i < a.Clave.Length; i++)
                {
                    if (a.Clave.EndsWith(" "))
                    {
                        a.Clave = a.Clave.Substring(0, a.Clave.Length - 1);
                    }
                    else break;
                }

                if (a.Usuario1.Equals(userName) && a.Clave.Equals(password))
                {
                    return true;
                }
            }

            return false;
        }

        public MembershipCreateStatus CreateUser(string userName, string password, string email)
        {
            if (userName == null)
            {
                return MembershipCreateStatus.InvalidUserName;
            }

            else if (password.Length < 6 || password == null)
            {
                return MembershipCreateStatus.InvalidPassword;
            }

            else
            {
                foreach (var u in db.Usuarios)
                {
                    if (userName.Equals(u.Usuario1))
                    {
                        return MembershipCreateStatus.DuplicateUserName;
                    }

                    //else if(email.Equals(usuario.email)) return MembershipCreateStatus.DuplicateEmail;
                    //falta el email de usuario
                }

                Usuario usuario = new Usuario();

                usuario.Usuario1 = userName;
                usuario.Clave = password;
                TipoDeUsuario a = new TipoDeUsuario();
                a.TipoDeUsuario1 = "0";
                usuario.TipoDeUsuario = a;
                //falta ponerle email, ver las cosas con los ID's

                AgregarUsuario(usuario);

                Save();

                return MembershipCreateStatus.Success;
            }
 
        }

        public bool ChangePassword(string userName, string oldPassword, string newPassword)
        {
            foreach (var a in db.Usuarios)
            {
                if (a.Clave.EndsWith(" "))
                {
                    a.Clave = a.Clave.Substring(0, a.Clave.Length - 4);
                }

                if (a.Usuario1.Equals(userName) && a.Clave.Equals(oldPassword))
                {
                    a.Clave = newPassword;
                    this.Save();
                    return true;
                }
            }

            return false;
        }

    }
}